package Test01;

import java.util.*;

//HashMap集合的使用
/*
存储学生对象并遍历
需求
    创建一个HashMap集合，键是学生对象(Student)，值是籍贯(String)。
    存储三个键值对元素，并遍历
    要求:同姓名，同年龄认为是同一个学生

核心点：
    HashMap的键位置如果存储的是自定义对象，需要重写hashCode和equals方法。
 */
public class Test05 {
    public static void main(String[] args) {

        //1、创建集合
        HashMap<Student05, String> hashMap = new HashMap<>();

        //2、创建学生对象
        Student05 s1 = new Student05("zhangsan", 23);
        Student05 s2 = new Student05("lisi", 24);
        Student05 s3 = new Student05("wangwu", 25);
        Student05 s4 = new Student05("wangwu", 25);

        //3、添加数据
        hashMap.put(s1, "北京");
        hashMap.put(s2, "上海");
        hashMap.put(s3, "天津");
        hashMap.put(s4, "重庆");

        //4、遍历数据
        Set<Student05> keys = hashMap.keySet();
        for (Student05 key : keys) {
            String value = hashMap.get(key);
            System.out.println(key + "=" + value);
        }

        System.out.println("------------------------------------------------");

        Set<Map.Entry<Student05, String>> entries = hashMap.entrySet();
        for (Map.Entry<Student05, String> entry : entries) {
            System.out.println(entry.getKey() + "=" + entry.getValue());
        }

        System.out.println("------------------------------------------------");

        hashMap.forEach((key, value) -> System.out.println(key + "=" + value));
    }
}

class Student05 {
    private String name;
    private int age;

    public Student05() {
    }

    public Student05(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     *
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     *
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     *
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     *
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student05 student05 = (Student05) o;
        return age == student05.age && Objects.equals(name, student05.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    public String toString() {
        return "Student05{name = " + name + ", age = " + age + "}";
    }
}
